﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FinanSoft.Entities;
using FinanSoft.BusinessLayer;
using FinanSoft.Utilities;
using System.Xml;
using System.Data.SqlClient;

namespace FinanSoft.PresentacionSociosNegocios
{
    public partial class frmConsultaDocs : Form
    {
        int QuienConsulta; //1 - Cliente, 2 - Proveedor
        private List<AuxiliarAccount> _auxAccountClientes = new List<AuxiliarAccount>();
        private List<AuxiliarAccount> _auxAccountProveedores = new List<AuxiliarAccount>();
        private List<OpenDocument> _openDocsList = new List<OpenDocument>();

        Document docSolicitado;

        public frmConsultaDocs(int _QuienConsulta)
        {
            InitializeComponent();

            QuienConsulta = _QuienConsulta;

            //Limpia combobox
            cmbDocType.Items.Clear();
            //Asigna lista que corresponde
            if (QuienConsulta == 1)
            {
                lblQuieConsulta.Text = "Clientes:";
                agregarCliente(1);
            }
            else
            {
                lblQuieConsulta.Text = "Proveedores:";
                agregarProveedor(2);
            }
            //Marca el primer valor
            cmbDocType.SelectedIndex = 0;
        }

        // Funcion que me va metiendo en un combobox todas las cuentas auxiliares tipo cliente
        private void agregarCliente(int idTipoCtaAuxP)
        {
            AuxiliarAccount[] arregloCuentaAux = AuxiliaryAccountManager.GetInstance().GetAuxiliarAccountsListByType(idTipoCtaAuxP);

            for (int ele = 0; ele < arregloCuentaAux.Length; ele++)
            {
                cmbDocType.Items.Add(arregloCuentaAux[ele].OwnerName);
                _auxAccountClientes.Insert(ele, arregloCuentaAux[ele]);
            }

        }

        // Funcion que me va metiendo en un combobox todas las cuentas auxiliares tipo proveedor
        private void agregarProveedor(int idTipoCtaAuxP)
        {
            AuxiliarAccount[] arregloCuentaAux = AuxiliaryAccountManager.GetInstance().GetAuxiliarAccountsListByType(idTipoCtaAuxP);

            for (int ele = 0; ele < arregloCuentaAux.Length; ele++)
            {
                cmbDocType.Items.Add(arregloCuentaAux[ele].OwnerName);
                _auxAccountProveedores.Insert(ele, arregloCuentaAux[ele]);
            }

        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnConsultar_Click(object sender, EventArgs e)
        {
            int idCtaAux = 0;

            if (QuienConsulta == 1) //Cliente
            {
                //Extrae el id de la cuenta auxiliar seleccionada
                idCtaAux = _auxAccountClientes[cmbDocType.SelectedIndex].AccountID;   
            }
            else
            {
                //Extrae el id de la cuenta auxiliar seleccionada
                idCtaAux = _auxAccountProveedores[cmbDocType.SelectedIndex].AccountID;   
            }
            // Realiza la consulta y se la asigna al grid
            limpiarGrid();
            agregarDocsAbiertos(idCtaAux);        
        }

        // Funcion que me va metiendo en un listbox todas las cuentas no especiales
        private void agregarDocsAbiertos(int idCtaAux)
        {
            // Verificamos que se haya seleccionado un client/proveedor
            if (cmbDocType.SelectedIndex == -1)
                MessageBox.Show(MessageConstants.NO_SELECTED_AUX_ACCOUNT, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                OpenDocument[] arregloDocsAbiertos = OpenDocumentManager.GetInstance().GetOpenDoc(idCtaAux);

                for (int ele = 0; ele < arregloDocsAbiertos.Length; ele++)
                {
                    //Guarda los valores en una lista
                    _openDocsList.Insert(ele, arregloDocsAbiertos[ele]);
                    //Asigna los valores en el grid
                    gridOpenDocs.Rows.Add();
                    gridOpenDocs[0, ele].Value = _openDocsList[ele].tipoDocumento;
                    gridOpenDocs[1, ele].Value = _openDocsList[ele].codigoDocumento;
                    gridOpenDocs[2, ele].Value = _openDocsList[ele].fechaVencimiento;
                    gridOpenDocs[3, ele].Value = _openDocsList[ele].Currency.Symbol + " " + _openDocsList[ele].monto;
                }                
            }

        }

        // Funcion que me va metiendo en un listbox todas las cuentas no especiales
        private void limpiarGrid()
        {
            gridOpenDocs.Rows.Clear();
            gridOpenDocs.Refresh();
        }

        private void btnVisualizar_Click(object sender, EventArgs e)
        {
            int numDoc = _openDocsList[gridOpenDocs.CurrentRow.Index].idDocumento;

            //Obtiene los datos del documento a mostrar
            docSolicitado = DocumentManager.GetInstance().GetDoc(numDoc);
            docSolicitado.tipoDocumento = gridOpenDocs.CurrentRow.Cells[0].Value.ToString();
            
            //Envia el documento a cargar en la vista previa
            frmPreviewDocs frmPreviewDocsV = new frmPreviewDocs(docSolicitado); // 1: FP, 2:FC, 3:NC
            frmPreviewDocsV.ShowDialog(this);
        }              

    }
}
